//package com.timothy.remote.core;
//
//import org.apache.shiro.web.util.SavedRequest;
//
//import javax.servlet.http.HttpServletRequest;
//
///**
// * 当访问一些需要登录的请求时，自动把请求保存下来，然后重定向到登录页面<br>
// * 因为SavedRequest不保存URL中的schema://domain:port部分，所以需要进行扩展
// */
//public class ClientSavedRequest extends SavedRequest {
//    private String scheme;
//    private String domain;
//    private int port;
//    private String contextPath;
//    private String backUrl;
//
//    public ClientSavedRequest(HttpServletRequest request, String backUrl) {
//        super(request);
//        this.scheme = request.getScheme();
//        this.domain = request.getServerName();
//        this.port = request.getServerPort();
//        this.backUrl = backUrl;
//        this.contextPath = request.getContextPath();
//    }
//
//    public String getScheme() {
//        return scheme;
//    }
//
//    public String getDomain() {
//        return domain;
//    }
//
//    public int getPort() {
//        return port;
//    }
//
//    public String getContextPath() {
//        return contextPath;
//    }
//
//    public String getBackUrl() {
//        return backUrl;
//    }
//
//    @Override
//    public String getRequestUrl() {
//        String requestURI = getRequestURI();
//        if (backUrl != null) {
//            if (backUrl.toLowerCase().startsWith("http://") || backUrl.toLowerCase().startsWith("https://")) {
//                // 如果从外部传入了successUrl（登录成功之后重定向的地址），且以http://或https://开头那么直接返回（相应的拦截器直接重定向到它即可）
//                return backUrl;
//            } else if (!backUrl.startsWith(contextPath)) {
//                // successUrl有值但没有上下文，拼上上下文；
//                requestURI = contextPath + backUrl;
//            } else {//3
//                requestURI = backUrl;
//            }
//        }
//
//        StringBuilder requestUrl = new StringBuilder(scheme);//4
//        requestUrl.append("://");
//        requestUrl.append(domain);//5
//        //6
//        if ("http".equalsIgnoreCase(scheme) && port != 80) {
//            requestUrl.append(":").append(String.valueOf(port));
//        } else if ("https".equalsIgnoreCase(scheme) && port != 443) {
//            requestUrl.append(":").append(String.valueOf(port));
//        }
//        //7
//        requestUrl.append(requestURI);
//        //8
//        if (backUrl == null && getQueryString() != null) {
//            requestUrl.append("?").append(getQueryString());
//        }
//        return requestUrl.toString();
//    }
//}
